home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / NormalAlien.s < prev    next >
Text File  |  1995-09-14  |  15KB  |  916 lines

  1. ItsANasty:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #80*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #40,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintop
  60.  move.l ToUpperFloor(a1),d0
  61. .notintop:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  move.w 12(a0),GraphicRoom(a0)
  66.  rts
  67.  
  68. .dyinganim:
  69.  dcb.w 11,33
  70.  dcb.w 15,32
  71.  
  72.  
  73. .notdying: 
  74.  
  75.  tst.b 17(a0)
  76.  beq.s .cantseeplayer
  77.  tst.w ThirdTimer(a0)
  78.  ble NastyAttack
  79.  move.w TempFrames,d0
  80.  sub.w d0,ThirdTimer(a0)
  81.  bra .waitandsee
  82.  
  83. .cantseeplayer:
  84.  
  85.  jsr GetRand
  86.  lsr.w #4,d0
  87.  and.w #63,d0
  88.  add.w #20,d0
  89.  move.w d0,ThirdTimer(a0)
  90.  
  91. .waitandsee:
  92.  
  93.  move.w #25,FourthTimer(a0)
  94.  
  95.  move.w 12(a0),d2
  96.  move.l ZoneAdds,a5
  97.  move.l (a5,d2.w*4),d0
  98.  add.l LEVELDATA,d0
  99.  move.l d0,objroom
  100.  
  101.  jsr ViewpointToDraw
  102.  
  103.  asl.l #2,d0
  104.  add.l alframe,d0
  105.  
  106.  move.l d0,8(a0)
  107.  
  108.  move.w 4(a0),d0
  109.  sub.w #40,d0
  110.  ext.l d0
  111.  asl.l #7,d0
  112.  move.l d0,newy
  113.  move.l d0,oldy
  114.  
  115.  move.w 12(a0),FromZone
  116.  bsr CheckTeleport
  117.  tst.b OKTEL
  118.  beq.s .notel
  119.  move.l floortemp,d0
  120.  asr.l #7,d0
  121.  add.w d0,4(a0)
  122.  bra .nochangedir
  123. .notel:
  124.  
  125.  move.w maxspd(a0),d2
  126.  muls TempFrames,d2
  127.  move.w d2,speed
  128.  move.w Facing(a0),d0
  129.  move.b ObjInTop(a0),StoodInTop
  130.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  131.  jsr GoInDirection
  132.  move.w #%1000000000,wallflags
  133.  
  134.  move.l #%111111110111100001,CollideFlags
  135.  bsr Collision
  136.  tst.b hitwall
  137.  beq.s .canmove
  138.  
  139.  move.w oldx,newx
  140.  move.w oldz,newz
  141.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  142.  bra .hitathing
  143.  
  144. .canmove:
  145.  
  146.  clr.b wallbounce
  147.  jsr MoveObject
  148.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  149.  move.b StoodInTop,ObjInTop(a0)
  150.  
  151. .hitathing:
  152.  
  153.  tst.b hitwall
  154.  beq.s .nochangedir
  155.  move.w #-1,ObjTimer(a0)
  156. .nochangedir
  157.  
  158.  move.l objroom,a2
  159.  move.w (a2),12(a0)
  160.  move.w newx,(a1)
  161.  move.w newz,4(a1)
  162.  
  163.  move.w (a2),d0
  164.  move.l #ZoneBrightTable,a5
  165.  move.l (a5,d0.w*4),d0
  166.  tst.b ObjInTop(a0)
  167.  bne.s .okbit
  168.  swap d0
  169. .okbit:
  170.  move.w d0,2(a0)
  171.  
  172.  move.l ToZoneFloor(a2),d0
  173.  tst.b ObjInTop(a0)
  174.  beq.s .notintopp
  175.  move.l ToUpperFloor(a2),d0
  176. .notintopp:
  177.  asr.l #7,d0
  178.  sub.w #40,d0
  179.  move.w d0,4(a0)
  180.  
  181.  moveq #0,d2
  182.  move.b damagetaken(a0),d2
  183.  beq .noscream
  184.  
  185.  sub.b d2,numlives(a0)
  186.  bgt .notdeadyet
  187.  
  188.  cmp.b #1,d2
  189.  ble .noexplode
  190.  
  191.  movem.l d0-d7/a0-a6,-(a7)
  192.  sub.l ObjectPoints,a1
  193.  add.l #ObjRotated,a1
  194.  move.l (a1),Noisex
  195.  move.w #400,Noisevol
  196.  move.w #14,Samplenum
  197.  move.b #1,chanpick
  198.  clr.b notifplaying
  199.  st backbeat
  200.  move.b 1(a0),IDNUM
  201.  jsr MakeSomeNoise
  202.  movem.l (a7)+,d0-d7/a0-a6
  203.  
  204.  movem.l d0-d7/a0-a6,-(a7)
  205.  move.w #0,d0
  206.  asr.w #2,d2
  207.  tst.w d2
  208.  bgt.s .ko
  209.  moveq #1,d2
  210. .ko:
  211.  move.w #31,d3
  212.  jsr ExplodeIntoBits
  213.  movem.l (a7)+,d0-d7/a0-a6
  214.  
  215.  cmp.b #40,d2
  216.  blt .noexplode
  217.  
  218.  move.w #-1,12(a0)
  219.  move.w 12(a0),GraphicRoom(a0)
  220.  rts
  221.  
  222. .noexplode:
  223.  
  224.  movem.l d0-d7/a0-a6,-(a7)
  225.  sub.l ObjectPoints,a1
  226.  add.l #ObjRotated,a1
  227.  move.l (a1),Noisex
  228.  move.w #200,Noisevol
  229.  move.w screamsound,Samplenum
  230.  move.b #1,chanpick
  231.  clr.b notifplaying
  232.  st backbeat
  233.  move.b 1(a0),IDNUM
  234.  jsr MakeSomeNoise
  235.  movem.l (a7)+,d0-d7/a0-a6
  236.  
  237.  move.w #25,ThirdTimer(a0)
  238.  move.w 12(a0),GraphicRoom(a0) 
  239.  rts
  240.  
  241. .notdeadyet:
  242.  clr.b damagetaken(a0)
  243.  movem.l d0-d7/a0-a6,-(a7)
  244.  sub.l ObjectPoints,a1
  245.  add.l #ObjRotated,a1
  246.  move.l (a1),Noisex
  247.  move.w #200,Noisevol
  248.  move.w screamsound,Samplenum
  249.  move.b #1,chanpick
  250.  clr.b notifplaying
  251.  move.b 1(a0),IDNUM
  252.  st backbeat
  253.  jsr MakeSomeNoise
  254.  movem.l (a7)+,d0-d7/a0-a6
  255.  
  256. .noscream
  257.  
  258.  
  259.  move.w TempFrames,d0
  260.  sub.w d0,ObjTimer(a0)
  261.  bge.s .keepsamedir
  262.  
  263.  jsr GetRand
  264.  and.w #8190,d0
  265.  move.w d0,Facing(a0)
  266.  move.w #50,ObjTimer(a0)
  267.  
  268. .keepsamedir:
  269.  
  270.  move.w TempFrames,d0
  271.  sub.w d0,SecTimer(a0)
  272.  bge.s .nohiss
  273.  
  274.  jsr GetRand
  275.  lsr.w #6,d0
  276.  and.w #1,d0
  277.  add.w #17,d0
  278.  movem.l d0-d7/a0-a6,-(a7)
  279.  sub.l ObjectPoints,a1
  280.  add.l #ObjRotated,a1
  281.  move.l (a1),Noisex
  282.  move.w #100,Noisevol
  283.  move.w d0,Samplenum
  284.  move.b #1,chanpick
  285.  clr.b notifplaying
  286.  move.b 1(a0),IDNUM
  287.  st backbeat
  288.  jsr MakeSomeNoise
  289.  movem.l (a7)+,d0-d7/a0-a6
  290.  
  291.  Jsr GetRand
  292.  lsr.w #6,d0
  293.  and.w #255,d0
  294.  add.w #300,d0
  295.  move.w d0,SecTimer(a0)
  296.  
  297. .nohiss:
  298.  
  299.  move.b ObjInTop(a0),ViewerTop
  300.  move.b PLR1_StoodInTop,TargetTop
  301.  move.l PLR1_Roompt,ToRoom
  302.  move.l objroom,FromRoom
  303.  move.w newx,Viewerx
  304.  move.w newz,Viewerz
  305.  move.w PLR1_xoff,Targetx
  306.  move.w PLR1_zoff,Targetz
  307.  move.l PLR1_yoff,d0
  308.  asr.l #7,d0
  309.  move.w d0,Targety
  310.  move.w 4(a0),Viewery
  311.  jsr CanItBeSeen
  312.  
  313.  clr.b 17(a0)
  314.  
  315.  tst.b CanSee
  316.  beq .carryonprowling
  317.  
  318.  move.b #1,17(a0)
  319.  
  320. .carryonprowling:
  321.  
  322.  move.b ObjInTop(a0),ViewerTop
  323.  move.b PLR2_StoodInTop,TargetTop
  324.  move.l PLR2_Roompt,ToRoom
  325.  move.l objroom,FromRoom
  326.  move.w newx,Viewerx
  327.  move.w newz,Viewerz
  328.  move.w PLR2_xoff,Targetx
  329.  move.w PLR2_zoff,Targetz
  330.  move.l PLR2_yoff,d0
  331.  asr.l #7,d0
  332.  move.w d0,Targety
  333.  move.w 4(a0),Viewery
  334.  jsr CanItBeSeen
  335.  
  336.  tst.b CanSee
  337.  beq .carryonprowling2
  338.  
  339.  or.b #2,17(a0)
  340.  
  341. .carryonprowling2:
  342.  
  343.  move.w 12(a0),GraphicRoom(a0)
  344.  rts
  345.  
  346. NastyAttack:
  347.  
  348.  move.w 12(a0),d2
  349.  move.l ZoneAdds,a5
  350.  move.l (a5,d2.w*4),d0
  351.  add.l LEVELDATA,d0
  352.  move.l d0,objroom
  353.  jsr ViewpointToDraw
  354.  asl.l #2,d0
  355.  add.l alframe,d0
  356.  move.l d0,8(a0)
  357.  
  358.  btst #0,17(a0)
  359.  beq NastyAttackPLR2
  360.  btst #1,17(a0)
  361.  beq NastyAttackPLR1
  362.  
  363.  move.l ObjectPoints,a1
  364.  move.w (a0),d0
  365.  move.w (a1,d0.w*8),d1
  366.  move.w 4(a1,d0.w*8),d2
  367.  
  368.  move.w PLR1_xoff,d3
  369.  move.w PLR1_zoff,d4
  370.  sub.w d1,d3
  371.  sub.w d2,d4
  372.  muls d3,d3
  373.  muls d4,d4
  374.  add.l d4,d3
  375.  move.w PLR2_xoff,d4
  376.  move.w PLR2_zoff,d5
  377.  sub.w d1,d4
  378.  sub.w d2,d5
  379.  muls d4,d4
  380.  muls d5,d5
  381.  add.l d5,d4
  382.  cmp.l d3,d4
  383.  ble NastyAttackPLR2
  384.  
  385.  
  386. NastyAttackPLR1:
  387.  
  388.  move.w 12(a0),FromZone
  389.  bsr CheckTeleport
  390.  tst.b OKTEL
  391.  beq.s .notel
  392.  move.l floortemp,d0
  393.  asr.l #7,d0
  394.  add.w d0,4(a0)
  395.  bra .NoMunch
  396. .notel:
  397.  
  398.  move.w PLR1_xoff,newx
  399.  move.w PLR1_zoff,newz
  400.  move.w PLR1_sinval,tempsin
  401.  move.w PLR1_cosval,tempcos
  402.  move.w p1_xoff,tempx
  403.  move.w p1_zoff,tempz
  404.  jsr RunAround
  405.  
  406.  move.w (a0),d1
  407.  move.l #ObjRotated,a6
  408.  move.l ObjectPoints,a1
  409.  lea (a1,d1.w*8),a1
  410.  lea (a6,d1.w*8),a6
  411.  move.w (a1),oldx
  412.  move.w 4(a1),oldz
  413.  move.w maxspd(a0),d2
  414.  muls.w TempFrames,d2
  415.  move.w d2,speed
  416.  move.w #160,Range
  417.  move.w 4(a0),d0
  418.  ext.l d0
  419.  asl.l #7,d0
  420.  sub.l #40*128,d0
  421.  move.l d0,newy
  422.  move.l d0,oldy
  423.  
  424.  move.b ObjInTop(a0),StoodInTop
  425.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  426.  clr.b canshove
  427.  clr.b GotThere
  428.  jsr HeadTowardsAng
  429.  move.w #%1000000000,wallflags
  430.  
  431.  move.l #%100000,CollideFlags
  432.  jsr Collision
  433.  tst.b hitwall
  434.  beq.s .nothitplayer
  435.  
  436.  move.w oldx,newx
  437.  move.w oldz,newz
  438.  st GotThere
  439.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  440.  bra .hitathing
  441.  
  442. .nothitplayer:
  443.  
  444.  move.l #%11111111110111000001,CollideFlags
  445.  jsr Collision
  446.  tst.b hitwall
  447.  beq.s .canmove
  448.  
  449.  move.w oldx,newx
  450.  move.w oldz,newz
  451.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  452.  bra .hitathing
  453.  
  454. .canmove:
  455.  
  456.  clr.b wallbounce
  457.  Jsr MoveObject
  458.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  459.  move.b StoodInTop,ObjInTop(a0)
  460.  
  461.  move.w AngRet,Facing(a0)
  462.  
  463. .hitathing:
  464.  
  465.  tst.b GotThere 
  466.  beq.s .NoMunch
  467.  tst.w FourthTimer(a0)
  468.  ble.s .OKtomunch
  469.  move.w TempFrames,d0
  470.  sub.w d0,FourthTimer(a0)
  471.  bra.s .NoMunch
  472. .OKtomunch:
  473.  move.w #20,FourthTimer(a0)
  474.  move.l PLR1_Obj,a2
  475.  add.b #2,damagetaken(a2)
  476.  
  477. .NoMunch: 
  478.  
  479.  move.l objroom,a2
  480.  move.w (a2),12(a0)
  481.  move.w newx,(a1)
  482.  move.w newz,4(a1)
  483.  
  484.  move.w (a2),d0
  485.  move.l #ZoneBrightTable,a5
  486.  move.l (a5,d0.w*4),d0
  487.  tst.b ObjInTop(a0)
  488.  bne.s .okbit
  489.  swap d0
  490. .okbit:
  491.  move.w d0,2(a0)
  492.  
  493.  move.l ToZoneFloor(a2),d0
  494.  tst.b ObjInTop(a0)
  495.  beq.s .notintop
  496.  move.l ToUpperFloor(a2),d0
  497. .notintop:
  498.  sub.l #40*128,d0
  499.  asr.l #7,d0
  500.  move.w d0,4(a0)
  501.  
  502.  moveq #0,d2
  503.  move.b damagetaken(a0),d2
  504.  beq .noscream
  505.  
  506.  sub.b d2,numlives(a0)
  507.  bgt .notdeadyet
  508.  
  509.  cmp.b #1,d2
  510.  ble .noexplode
  511.  
  512.  movem.l d0-d7/a0-a6,-(a7)
  513.  sub.l ObjectPoints,a1
  514.  add.l #ObjRotated,a1
  515.  move.l (a1),Noisex
  516.  move.w #400,Noisevol
  517.  move.w #14,Samplenum
  518.  move.b #1,chanpick
  519.  clr.b notifplaying
  520.  st backbeat
  521.  move.b 1(a0),IDNUM
  522.  jsr MakeSomeNoise
  523.  movem.l (a7)+,d0-d7/a0-a6
  524.  
  525.  movem.l d0-d7/a0-a6,-(a7)
  526.  move.w #0,d0
  527.  asr.w #2,d2
  528.  tst.w d2
  529.  bgt.s .ko
  530.  moveq #1,d2
  531. .ko:
  532.  move.w #31,d3
  533.  jsr ExplodeIntoBits
  534.  movem.l (a7)+,d0-d7/a0-a6
  535.  
  536.  cmp.b #40,d2
  537.  blt .notgone
  538.  
  539.  move.w #-1,12(a0)
  540.  move.w 12(a0),GraphicRoom(a0)
  541.  rts
  542.  
  543. .noexplode:
  544.  
  545.  movem.l d0-d7/a0-a6,-(a7)
  546.  sub.l ObjectPoints,a1
  547.  add.l #ObjRotated,a1
  548.  move.l (a1),Noisex
  549.  move.w #200,Noisevol
  550.  move.w screamsound,Samplenum
  551.  move.b #1,chanpick
  552.  clr.b notifplaying
  553.  st backbeat
  554.  move.b 1(a0),IDNUM
  555.  jsr MakeSomeNoise
  556.  movem.l (a7)+,d0-d7/a0-a6
  557.  
  558. .notgone:
  559.  move.b #0,numlives(a0)
  560.  move.w #25,ThirdTimer(a0)
  561.  
  562.  move.w 12(a0),GraphicRoom(a0)
  563.  rts
  564.  
  565. .notdeadyet:
  566.  clr.b damagetaken(a0)
  567.  movem.l d0-d7/a0-a6,-(a7)
  568.  sub.l ObjectPoints,a1
  569.  add.l #ObjRotated,a1
  570.  move.l (a1),Noisex
  571.  move.w #200,Noisevol
  572.  move.w screamsound,Samplenum
  573.  move.b #1,chanpick
  574.  clr.b notifplaying
  575.  move.b 1(a0),IDNUM
  576.  st backbeat
  577.  jsr MakeSomeNoise
  578.  movem.l (a7)+,d0-d7/a0-a6
  579.  
  580. .noscream
  581.  
  582.  move.w TempFrames,d0
  583.  sub.w d0,SecTimer(a0)
  584.  bge.s .nohiss
  585.  
  586.  jsr GetRand
  587.  lsr.w #6,d0
  588.  and.w #1,d0
  589.  add.w #17,d0
  590.  movem.l d0-d7/a0-a6,-(a7)
  591.  sub.l ObjectPoints,a1
  592.  add.l #ObjRotated,a1
  593.  move.l (a1),Noisex
  594.  move.w #800,Noisevol
  595.  move.w d0,Samplenum
  596.  move.b #1,chanpick
  597.  clr.b notifplaying
  598.  move.b 1(a0),IDNUM
  599.  st backbeat
  600.  jsr MakeSomeNoise
  601.  movem.l (a7)+,d0-d7/a0-a6
  602.  
  603.  Jsr GetRand
  604.  lsr.w #6,d0
  605.  and.w #255,d0
  606.  add.w #300,d0
  607.  move.w d0,SecTimer(a0)
  608.  
  609. .nohiss:
  610.  
  611.  move.b ObjInTop(a0),ViewerTop
  612.  move.b PLR1_StoodInTop,TargetTop
  613.  move.l PLR1_Roompt,ToRoom
  614.  move.l objroom,FromRoom
  615.  move.w newx,Viewerx
  616.  move.w newz,Viewerz
  617.  move.w PLR1_xoff,Targetx
  618.  move.w PLR1_zoff,Targetz
  619.  move.l PLR1_yoff,d0
  620.  asr.l #7,d0
  621.  move.w d0,Targety
  622.  move.w 4(a0),Viewery
  623.  jsr CanItBeSeen
  624.  
  625.  clr.b 17(a0)
  626.  
  627.  tst.b CanSee
  628.  beq .carryonprowling
  629.  
  630.  move.b #1,17(a0)
  631.  
  632. .carryonprowling:
  633.  
  634.  move.b ObjInTop(a0),ViewerTop
  635.  move.b PLR2_StoodInTop,TargetTop
  636.  move.l PLR2_Roompt,ToRoom
  637.  move.l objroom,FromRoom
  638.  move.w newx,Viewerx
  639.  move.w newz,Viewerz
  640.  move.w PLR2_xoff,Targetx
  641.  move.w PLR2_zoff,Targetz
  642.  move.l PLR2_yoff,d0
  643.  asr.l #7,d0
  644.  move.w d0,Targety
  645.  move.w 4(a0),Viewery
  646.  jsr CanItBeSeen
  647.  
  648.  tst.b CanSee
  649.  beq .carryonprowling2
  650.  
  651.  or.b #2,17(a0)
  652.  
  653. .carryonprowling2:
  654.  
  655.  move.w 12(a0),GraphicRoom(a0)
  656.  
  657.  rts
  658.  
  659. *************************************************
  660.  
  661. NastyAttackPLR2:
  662.  
  663.  move.w 12(a0),FromZone
  664.  bsr CheckTeleport
  665.  tst.b OKTEL
  666.  beq.s .notel2
  667.  move.l floortemp,d0
  668.  asr.l #7,d0
  669.  add.w d0,4(a0)
  670.  bra .NoMunch2
  671. .notel2:
  672.  
  673.  move.w PLR2_xoff,newx
  674.  move.w PLR2_zoff,newz
  675.  move.w (a0),d1
  676.  move.l #ObjRotated,a6
  677.  move.l ObjectPoints,a1
  678.  lea (a1,d1.w*8),a1
  679.  lea (a6,d1.w*8),a6
  680.  move.w (a1),oldx
  681.  move.w 4(a1),oldz
  682.  move.w maxspd(a0),d2
  683.  muls.w TempFrames,d2
  684.  move.w d2,speed
  685.  move.w #80,Range
  686.  move.w 4(a0),d0
  687.  ext.l d0
  688.  asl.l #7,d0
  689.  sub.l #40*128,d0
  690.  move.l d0,newy
  691.  move.l d0,oldy
  692.  
  693.  move.b ObjInTop(a0),StoodInTop
  694.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  695.  clr.b canshove
  696.  clr.b GotThere
  697.  jsr HeadTowardsAng
  698.  move.w #%1000000000,wallflags
  699.  
  700.  move.l #%100000,CollideFlags
  701.  jsr Collision
  702.  tst.b hitwall
  703.  beq.s .nothitplayer
  704.  
  705.  move.w oldx,newx
  706.  move.w oldz,newz
  707.  st GotThere
  708.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  709.  bra .hitathing
  710.  
  711. .nothitplayer:
  712.  
  713.  move.l #%11111111110111000001,CollideFlags
  714.  jsr Collision
  715.  tst.b hitwall
  716.  beq.s .canmove
  717.  
  718.  move.w oldx,newx
  719.  move.w oldz,newz
  720.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  721.  bra .hitathing
  722.  
  723. .canmove:
  724.  
  725.  clr.b wallbounce
  726.  Jsr MoveObject
  727.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  728.  move.b StoodInTop,ObjInTop(a0)
  729.  
  730.  move.w AngRet,Facing(a0)
  731.  
  732. .hitathing:
  733.  
  734.  tst.b GotThere 
  735.  beq.s .NoMunch2
  736.  tst.w FourthTimer(a0)
  737.  ble.s .OKtomunch2
  738.  move.w TempFrames,d0
  739.  sub.w d0,FourthTimer(a0)
  740.  bra.s .NoMunch2
  741. .OKtomunch2:
  742.  move.w #20,FourthTimer(a0)
  743.  move.l PLR2_Obj,a2
  744.  add.b #2,damagetaken(a2)
  745.  
  746. .NoMunch2: 
  747.  
  748.  move.l objroom,a2
  749.  move.w (a2),12(a0)
  750.  move.w newx,(a1)
  751.  move.w newz,4(a1)
  752.  
  753.  move.w (a2),d0
  754.  move.l #ZoneBrightTable,a5
  755.  move.l (a5,d0.w*4),d0
  756.  tst.b ObjInTop(a0)
  757.  bne.s .okbit
  758.  swap d0
  759. .okbit:
  760.  move.w d0,2(a0)
  761.  
  762.  move.l ToZoneFloor(a2),d0
  763.  tst.b ObjInTop(a0)
  764.  beq.s .notintop
  765.  move.l ToUpperFloor(a2),d0
  766. .notintop:
  767.  sub.l #40*128,d0
  768.  asr.l #7,d0
  769.  move.w d0,4(a0)
  770.  
  771.  move.b damagetaken(a0),d2
  772.  beq .noscream
  773.  
  774.  sub.b d2,numlives(a0)
  775.  bgt .notdeadyet
  776.  
  777. ; cmp.b #1,d2
  778. ; ble.s .noexplode
  779.  
  780.  movem.l d0-d7/a0-a6,-(a7)
  781.  sub.l ObjectPoints,a1
  782.  add.l #ObjRotated,a1
  783.  move.l (a1),Noisex
  784.  move.w #400,Noisevol
  785.  move.w #14,Samplenum
  786.  move.b #1,chanpick
  787.  clr.b notifplaying
  788.  st backbeat
  789.  move.b 1(a0),IDNUM
  790.  jsr MakeSomeNoise
  791.  movem.l (a7)+,d0-d7/a0-a6
  792.  
  793.  movem.l d0-d7/a0-a6,-(a7)
  794.  move.w #0,d0
  795.  move.w #7,d2
  796.  move.w #31,d3
  797.  jsr ExplodeIntoBits
  798.  movem.l (a7)+,d0-d7/a0-a6
  799.  move.w #-1,12(a0)
  800.  move.w 12(a0),GraphicRoom(a0)
  801.  rts
  802.  
  803. .noexplode:
  804.  
  805.  movem.l d0-d7/a0-a6,-(a7)
  806.  sub.l ObjectPoints,a1
  807.  add.l #ObjRotated,a1
  808.  move.l (a1),Noisex
  809.  move.w #200,Noisevol
  810.  move.w screamsound,Samplenum
  811.  move.b #1,chanpick
  812.  clr.b notifplaying
  813.  st backbeat
  814.  move.b 1(a0),IDNUM
  815.  jsr MakeSomeNoise
  816.  movem.l (a7)+,d0-d7/a0-a6
  817.  move.l deadframe,8(a0)
  818.  move.w 12(a0),GraphicRoom(a0)
  819.  rts
  820.  
  821. .notdeadyet:
  822.  clr.b damagetaken(a0)
  823.  movem.l d0-d7/a0-a6,-(a7)
  824.  sub.l ObjectPoints,a1
  825.  add.l #ObjRotated,a1
  826.  move.l (a1),Noisex
  827.  move.w #200,Noisevol
  828.  move.w screamsound,Samplenum
  829.  move.b #1,chanpick
  830.  clr.b notifplaying
  831.  move.b 1(a0),IDNUM
  832.  st backbeat
  833.  jsr MakeSomeNoise
  834.  movem.l (a7)+,d0-d7/a0-a6
  835.  
  836. .noscream
  837.  
  838.  move.w TempFrames,d0
  839.  sub.w d0,SecTimer(a0)
  840.  bge.s .nohiss
  841.  
  842.  jsr GetRand
  843.  lsr.w #6,d0
  844.  and.w #1,d0
  845.  add.w #17,d0
  846.  movem.l d0-d7/a0-a6,-(a7)
  847.  sub.l ObjectPoints,a1
  848.  add.l #ObjRotated,a1
  849.  move.l (a1),Noisex
  850.  move.w #800,Noisevol
  851.  move.w d0,Samplenum
  852.  move.b #1,chanpick
  853.  clr.b notifplaying
  854.  move.b 1(a0),IDNUM
  855.  st backbeat
  856.  jsr MakeSomeNoise
  857.  movem.l (a7)+,d0-d7/a0-a6
  858.  
  859.  Jsr GetRand
  860.  lsr.w #6,d0
  861.  and.w #255,d0
  862.  add.w #300,d0
  863.  move.w d0,SecTimer(a0)
  864.  
  865. .nohiss:
  866.  
  867.  move.b ObjInTop(a0),ViewerTop
  868.  move.b PLR1_StoodInTop,TargetTop
  869.  move.l PLR1_Roompt,ToRoom
  870.  move.l objroom,FromRoom
  871.  move.w newx,Viewerx
  872.  move.w newz,Viewerz
  873.  move.w PLR1_xoff,Targetx
  874.  move.w PLR1_zoff,Targetz
  875.  move.l PLR1_yoff,d0
  876.  asr.l #7,d0
  877.  move.w d0,Targety
  878.  move.w 4(a0),Viewery
  879.  jsr CanItBeSeen
  880.  
  881.  clr.b 17(a0)
  882.  
  883.  tst.b CanSee
  884.  beq .carryonprowling
  885.  
  886.  move.b #1,17(a0)
  887.  
  888. .carryonprowling:
  889.  
  890.  move.b ObjInTop(a0),ViewerTop
  891.  move.b PLR2_StoodInTop,TargetTop
  892.  move.l PLR2_Roompt,ToRoom
  893.  move.l objroom,FromRoom
  894.  move.w newx,Viewerx
  895.  move.w newz,Viewerz
  896.  move.w PLR2_xoff,Targetx
  897.  move.w PLR2_zoff,Targetz
  898.  move.l PLR2_yoff,d0
  899.  asr.l #7,d0
  900.  move.w d0,Targety
  901.  move.w 4(a0),Viewery
  902.  jsr CanItBeSeen
  903.  
  904.  tst.b CanSee
  905.  beq .carryonprowling2
  906.  
  907.  or.b #2,17(a0)
  908.  
  909. .carryonprowling2:
  910.  
  911.  move.w 12(a0),GraphicRoom(a0)
  912.  
  913.  rts
  914.  
  915.  
  916.